/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package model.gestion_mouvement;

import model.util.Direction;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author ANNAS
 */
public class MouvementValidatorPion extends MouvementValidator {

    private ArrayList<Direction> directionDeplacements;
    public MouvementValidatorPion() {
        this.longueurChemin = 2;
        directionDeplacements = new ArrayList<Direction> ();
    }

    @Override
    public void setDirection(Direction direction) {
        super.setDirection(direction);
        if(direction==Direction.NORD)
        {
            this.directionDeplacements.add(Direction.NORD_EST);
            this.directionDeplacements.add(Direction.NORD_OUEST);
        }
        else if(direction==Direction.SUD)
        {
            this.directionDeplacements.add(Direction.SUD_EST);
            this.directionDeplacements.add(Direction.SUD_OUEST);
        }
    }

    
    
    @Override
    protected void validationMouvement(){
        try
        {
            if(getArrive().hasPiece())
                    throw new Exception("La case destination nest pas vide!");
            if(!getArrive().isCaseAutorise())
                    throw new Exception("La case n'est pas autorisé au déplacement!");
            List<ICase> chemin = getChemin();
            if(chemin.size()==1)
            {
                Direction dir = getDepart().getDirectionVers(getArrive());
                if(!this.directionDeplacements.contains(dir))
                    throw new Exception("Le pion ne peut pas reculer!");
            }
            else if(chemin.size()==2)
            {
                if(!chemin.get(0).hasPiece())
                    throw new Exception("Le pion ne peut pas se déplacer de 2 sans manger!");
                if(chemin.get(0).hasPiece())
                {
                    IPiece p = chemin.get(0).getPiece();
                    if(p.getCouleur()==this.getCouleur())
                    throw new Exception("Le pion manger est de même couleur!");
                    this.pieceAManger.add(p);
                }
            }
            else
            {
                throw new Exception("La longueur du chemin n'est pas valide!");
            }
        }
        catch(Exception e)
        {
            this.valid = false;
            this.pieceAManger.clear();
            return;
        }
        this.valid = true;
    }
    
   
  
}
